/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.entity.Votos;
import javax.persistence.Query;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import java.text.*;
import java.util.*;


/**
 *
 * @author victor
 */
@Stateless
public class VotosFachadaBean implements VotosFachadaRemote, VotosFachadaLocal {
    @PersistenceContext
    private EntityManager em;

    public void persist(Object object) {
        em.persist(object);
    }

    public boolean ExisteVoto(long idUsuario) {

        Query miConsulta =  em.createNamedQuery("Votos.ExisteVoto");

        miConsulta.setParameter("idUsuario",idUsuario);
      
        Votos miVoto = null ;
        try
        {
            miVoto = (Votos)miConsulta.getSingleResult();

        }catch ( NoResultException e ){}
         catch ( NonUniqueResultException e) {}

        if (miVoto==null) return false; else return true;
    }

    public Votos ObtenerUltimoVoto() {

        Query miConsulta =  em.createNamedQuery("Votos.ObtenerUltimoVoto");
        miConsulta.setMaxResults(1);
        Votos miVoto = null ;
        try
        {
            miVoto = (Votos)miConsulta.getSingleResult();

        }catch ( NoResultException e ){}
         catch ( NonUniqueResultException e) {}
        return miVoto;
    }
    public int CerrarVotacion() {

        Query miConsulta =  em.createNamedQuery("Votos.CerrarVotacion");
       
        int exito = 0 ;
        try
        {
            exito = miConsulta.executeUpdate();

        }catch ( Exception e ){ exito = -1; return exito;}
         return exito;
    }
     public int ContarVotosTema(long idTema) {

        Query miConsulta =  em.createNamedQuery("Votos.ContarVotosTema");
        miConsulta.setParameter("idTema",idTema);
        int exito = 0 ;
        try
        {
            exito = ((Long) miConsulta.getSingleResult()).intValue();
            
        }catch ( Exception e ){ exito = -1; return exito;}
         return exito;
    }
     public List ListarVotos(int Semana, int Maximo) {

        Query miConsulta =  em.createNativeQuery("SELECT temas.NombreInt, temas.Cancion, count(votos.id) AS Cant FROM votos, temas WHERE votos.tipo="+Semana+" And votos.idtema=temas.id GROUP BY temas.id, temas.NombreInt, Temas.Cancion ORDER BY count(votos.id) DESC");
        //miConsulta.setParameter("tipo", String.valueOf(Semana));
        miConsulta.setMaxResults(Maximo);
        List Resultados = null;
        try
        {
            Resultados = miConsulta.getResultList();
        }catch ( Exception e ){ }
         return Resultados;
    }
    public List verVotos(int Semana) {  // No usado

        Query miConsulta =  em.createQuery("SELECT miVoto FROM Votos miVoto WHERE miVoto.Tipo=2");

        miConsulta.setMaxResults(20);
        List Resultados = null;
        try
        {
            Resultados = miConsulta.getResultList();
        }catch ( Exception e ){ }
         return Resultados;
    }

    public int ContarVotos(String inicio, String fin){

        int total = 0;
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
        Date fechaInicio = new Date();
        Date fechaFin = new Date();
        try
        {
            fechaInicio = formatoFecha.parse(inicio);
            fechaFin = formatoFecha.parse(fin);
        }
        catch (ParseException e){}

        Query miConsulta = em.createNamedQuery("Votos.ContarVotos");
        miConsulta.setParameter("inicio", fechaInicio);
        miConsulta.setParameter("fin", fechaFin);
        try
        {
            total = ((Long) miConsulta.getSingleResult()).intValue();
        }catch ( Exception e ){total = -1; return total;}

        return total;
    }

    public List IDUsuariosVotos(String inicio, String fin){
        Query miConsulta = em.createNamedQuery("Votos.LlenarIDUsuarios");

        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
        Date fechaInicio = new Date();
        Date fechaFin = new Date();
        try
        {
            fechaInicio = formatoFecha.parse(inicio);
            fechaFin = formatoFecha.parse(fin);
        }
        catch (ParseException e){}    
        miConsulta.setParameter("inicio", fechaInicio);
        miConsulta.setParameter("fin", fechaFin);
        List Resultados = null;
        try
        {
            Resultados = miConsulta.getResultList();
        }catch ( Exception e ){ }

         return Resultados;
    }

    public List ListvotosUComun(Long id){ //borre (Long uu)
        
        Query miConsulta = em.createNativeQuery("SELECT votos.fecha, temas.nombreint, temas.cancion FROM votos,temas WHERE votos.idtema=temas.id AND votos.idusuario="+id);
       // String stQuery="select votos.fecha, temas.NOMBREINT, temas.CANCION FROM votos,temas WHERE votos.IDTEMA=temas.ID and votos.IDUSUARIO="+uu;
       // Query miConsulta =  em.createNativeQuery(stQuery);
        //miConsulta.setParameter("ID",id);
        List miRes = null;
        try
        {
            miRes = miConsulta.getResultList();
            int aver = miRes.size();

            System.out.println(Integer.toString(aver));
        }catch ( Exception e ){ }

    return miRes;
    }

    public List ListarVotosE() {    // int Semana, int Maximo

        Query miConsulta =  em.createNativeQuery("SELECT temas.id, temas.nombreint, temas.cancion FROM temas,votos WHERE votos.idTema=temas.Id GROUP BY temas.Id;");
        //Listados de votos para el caso de uso eliminar tema inexistentes - Andres
       // miConsulta.setMaxResults();   //Maximo
        List Resultados = null;
        try
        {
            Resultados = miConsulta.getResultList();
        }catch ( Exception e ){ }
         return Resultados;
    }

    public void borrarVoto(Long IdTema) {
        Query miConsulta =  em.createNamedQuery("Votos.Borrar");
        miConsulta.setParameter("IDTema",IdTema);

        try
        {

            miConsulta.executeUpdate();

        }catch ( NoResultException e){}
        return;
    }

    public List ListadoVotosFecha(String inicio, String fin){


        GregorianCalendar calI = new GregorianCalendar();
        GregorianCalendar calF = new GregorianCalendar();

        DateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");

        Date fechaInicio = new Date();
        Date fechaFin = new Date();

        try
        {
            fechaInicio = formatoFecha.parse(inicio);
            fechaFin = formatoFecha.parse(fin);
            calI.setTime(fechaInicio);
            calF.setTime(fechaFin);

        }
        catch (ParseException e){}

        int diaI = calI.get(Calendar.DATE);
        int mesI = calI.get(Calendar.MONTH)+1;
        int anioI = calI.get(Calendar.YEAR);

        int diaF = calF.get(Calendar.DATE);
        int mesF = calF.get(Calendar.MONTH)+1;
        int anioF = calF.get(Calendar.YEAR);

        String fechaInicioFunca = Integer.toString(anioI)+"/"+Integer.toString(mesI)+"/"+Integer.toString(diaI);
        String fechaFinFunca = Integer.toString(anioF)+"/"+Integer.toString(mesF)+"/"+Integer.toString(diaF);

        Query miConsulta = em.createNativeQuery("SELECT temas.NombreInt, temas.Cancion , count(votos.id) FROM votos, temas WHERE temas.id = votos.idtema AND votos.fecha between '"+fechaInicioFunca+"' and '"+fechaFinFunca+"' group by votos.idtema");
        List Resultados = null;
        try
        {
            Resultados = miConsulta.getResultList();            
        }catch ( Exception e ){ System.out.println(e.getMessage()); }

         return Resultados;
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method" or "Web Service > Add Operation")
 
}
